package network.server;

/**
 * author: Simon Michel, http://www.itblogging.de/java/java-mysql-jdbc-tutorial/
 * übernommen und modifiziert von: nlehms
 */
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class MySQLConnection {

	private static MySQLConnection instance = null;
	private static Connection conn = null;

	// Hostname
	private static String dbHost = "localhost";

	// Port -- Standard: 3306
	private static String dbPort = "3306";

	// Datenbankname
	private static String database = "batchsystem";

	// Datenbankuser
	private static String dbUser = "root";

	// Datenbankpasswort
	private static String dbPassword = "1234";

	private MySQLConnection() {
		try {

			// Datenbanktreiber für ODBC Schnittstellen laden.
			// Für verschiedene ODBC-Datenbanken muss dieser Treiber
			// nur einmal geladen werden.
			Class.forName("com.mysql.jdbc.Driver");

			// Verbindung zur ODBC-Datenbank 'sakila' herstellen.
			// Es wird die JDBC-ODBC-Brücke verwendet.
			conn = DriverManager.getConnection("jdbc:mysql://" + dbHost + ":"
					+ dbPort + "/" + database + "?" + "user=" + dbUser + "&"
					+ "password=" + dbPassword);
		} catch (ClassNotFoundException e) {
			System.out.println("Treiber nicht gefunden");
		} catch (SQLException e) {
			System.out.println("Connect nicht moeglich");
		}
	}

	public static MySQLConnection getInstance()
	{
		if(instance == null)
			instance = new MySQLConnection();
		return instance;
	}
        
        
        
        public String[][] query(String[] felder,String tabelle,String add){
            
            //Ausgabevariable definieren
            String[][] output = null;
            
            //SELECT-Befehl aufbauen
            String select="SELECT ";
            select +=felder[0];
            for (int i=1; i<felder.length; i++){
                select += ", "+felder[i];
            }
            select += " FROM "+tabelle;
            if (add!=null){
                select += " WHERE "+add+";";
            }

		if(conn != null)
		{
			// Anfrage-Statement erzeugen.
			Statement query;
			try {
				query = conn.createStatement();

				// Ergebnistabelle erzeugen und abholen.
				ResultSet result = query.executeQuery(select);
                                
                                //Anzahl ergebnisse zählen
                                int anzahl=0;
				while (result.next()) {
                                    anzahl+=1;
                                }
                                
                                //ergebnisse in ein Array einfüllen
                                output = new String[anzahl][felder.length];
                                int j=0;
                                result = query.executeQuery(select);
				while (result.next()) {
                                    for (int i=0; i<felder.length; i++){
                                        output[j][i]=result.getString(felder[i]);
                                    }
                                    j+=1;
                                }
                            
                            
                        } catch (SQLException e) {
				e.printStackTrace();
			}
                }
                if (output==null){
                    System.out.println("nichts gefunden");
                }
                return output;
                
        }
        
        
        public String[] query(String feld,String tabelle,String add){
            
            //Ausgabevariable definieren
            String[] output = null;
            
            //SELECT-Befehl aufbauen
            String select="SELECT "+feld;
            select += " FROM "+tabelle;
            if (add!=null){
                select += " WHERE "+add+";";
            }

		if(conn != null)
		{
			// Anfrage-Statement erzeugen.
			Statement query;
			try {
				query = conn.createStatement();

				// Ergebnistabelle erzeugen und abholen.
				ResultSet result = query.executeQuery(select);
                                
                                //Anzahl ergebnisse zählen
                                int anzahl=0;
				while (result.next()) {
                                    anzahl+=1;
                                }
                                
                                //ergebnisse in ein Array einfüllen
                                output = new String[anzahl];
                                int j=0;
                                result = query.executeQuery(select);
				while (result.next()) {
                                    output[j]=result.getString(feld);
                                    j+=1;
                                }
                            
                            
                        } catch (SQLException e) {
				e.printStackTrace();
			}
                }
                if (output==null){
                    System.out.println("nichts gefunden");
                }
                return output;
                
        }
}

